/**
*策略模式
*定义一系列的算法,把每一个算法封装起来,并且使它们可相互替换。
*本模式使得算法可独立于使用它的客户变化
*/

//利用类模板实现策略模式

#include <iostream>
using namespace std;


class StrategyA
{
public:
	void run()
	{
		cout << "StrategyA" << endl;
	}
};

class StrategyB
{
public:
	void run()
	{
		cout << "StrategyB" << endl;
	}
};

template<class Strategy>
class Context
{
public:
	Context()
	{
		this_s = Strategy();
	}

	void run()
	{
		this_s.run();
	}
private:
	Strategy this_s;
};

int main()
{
	Context<StrategyA> c1;
	Context<StrategyB> c2;
	c2.run();
	c1.run();
};
